//
//  HomeTableViewController.swift
//  Sina
//
//  Created by maling  on 15/11/3.
//  Copyright © 2015年 maling . All rights reserved.
//

import UIKit
import SVProgressHUD


/// 原创微博的可重用ID
 let StatuscellNormalId = "StatuscellNormalId"
 /// 转发微博的可重用ID
let StatusCellRetweetedId = "StatusCellRetweetedId"


class HomeTableViewController: VisitorTableViewController {

//     /// 微博数据模型(这里是声明属性)
//    var dataList: [Status]?

    // TODO:-微博列表数据模型
     private lazy var listViewModel = StatusListVeiwModel()
    
    override func viewDidLoad() {
        super.viewDidLoad()

        // 1.如果没有登录 ，才会显示访客视图见面
        if !UserAccountViewModel.sharedUserAccount.userLogin{
             self.visitorView?.setViewInfo(nil, title: "关注一些人，回这里看看有什么惊喜")
             return
        }
        
        
        // 3.绑定数据表格
        prepareTableView()
        
        // 2.加载微博网络数据
        loadData()
        
    }
    
    //准备数据表格
    private func prepareTableView() {
    
        // 注册可重用celld
        tableView.registerClass(StatusRetweetedCell.self, forCellReuseIdentifier: StatusCellRetweetedId)
        tableView.registerClass(StatusNormalCell.self, forCellReuseIdentifier: StatuscellNormalId)
        
//        //设置行高
//        tableView.rowHeight = 200
        
        // 自动计算行高 - 需要一个自上向下的自动布局的控件，制定一个向下的约束
        //MARK: 设置自动计算行高 一定要设置预估行高,
        /**
          设置行高需要三部： 1》 先设置预估行高 2》 设置自动计算行高 3》 设置一个向下的约束
        */
        tableView.estimatedRowHeight = 400
 
        // 取消分割线
        tableView.separatorStyle = UITableViewCellSeparatorStyle.None
        
//        //MARK: - 下拉刷新控件默认没有 - 高度60, 自己创建一个
        refreshControl = WBRefreshControl()
        // 监听方法
        refreshControl?.addTarget(self, action: "loadData", forControlEvents: UIControlEvents.ValueChanged)
        
        // MARK: - 设置下拉刷新的小转轮 使用系统自带的
//        let indicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.White)
//        indicator.startAnimating()
//        indicator.color = UIColor.lightGrayColor()
        tableView.tableFooterView = pullupView
  
    }
    
   // MARK: - 懒加载 上拉刷新提示视图
    /// 上拉刷新
    private lazy var pullupView: UIActivityIndicatorView = {
        
        let indicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge)
        indicator.color = UIColor.lightGrayColor()
        return indicator
        }()
    
    
    
    
    //MARK: 下拉刷新加载 返回网络数据
    @objc private func loadData() {
//        refreshControl?.beginRefreshing()
  
        //
        
        //返回网络微博数据是否成功
      
        listViewModel.loadStatus(isPullup: pullupView.isAnimating()) { (isSuccessed) -> () in
          
            // 关闭刷新控件
            self.refreshControl?.endRefreshing()
            // 关闭上拉刷新
            self.pullupView.stopAnimating()
            
            if !isSuccessed {
            
                SVProgressHUD.showErrorWithStatus("加载数据出错,请稍后再试")
            
                return
            }
            
            //执行到这里说明数据返回成功
//            print(self.listViewModel.statusList)
      
            // 刷新数据
            self.tableView.reloadData()
            
        }
    
    }
    
    
}
//MARK: - 数据原方法
extension HomeTableViewController {
    
    //返回数据cell行数
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        //        return dataList?.count ?? 0
        return listViewModel.statusList.count
    }
    
    //返回cell里面的样式
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
//        let cell = tableView.dequeueReusableCellWithIdentifier(StatusCellRetweetedId, forIndexPath: indexPath) as! StatusCellTableViewCell
//        
//        cell.viewModel = listViewModel.statusList[indexPath.row]
//        
       
        // TODO: - 修改可重用表示符号
        // 1> 获取视图模型
        let vm = listViewModel.statusList[indexPath.row]
        
        // 2> 获取可重用cell 会调用行高方法
        
      let cell = tableView.dequeueReusableCellWithIdentifier(StatusCellRetweetedId, forIndexPath: indexPath) as! StatusCellTableViewCell
        // 3> 设置视图模型
        cell.viewModel = vm
        
        // 4> 判断是不是最后一条微博
        if indexPath.row == listViewModel.statusList.count - 1 && !pullupView.isAnimating() {
        
            // 开始转动小转轮
            pullupView.startAnimating()
            // 刷新数据
            loadData()
        }
        
        return cell
        
    }
    
//    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
////
////        // 1. 视图模型
//        let vm = listViewModel.statusList[indexPath.row]
//        
//        // 2. cell
//        let cell = StatusCellTableViewCell(style: .Default, reuseIdentifier: StatuscellNormalId)
//        
//        // 3. 返回高度
//        return cell.rowHeightBack(vm)
//    }

    
    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        
        return listViewModel.statusList[indexPath.row].rowHeight
    }

    
}

